From 6c5509693349a6e1c7459cb4cbff7ef9c7546077 Mon Sep 17 00:00:00 2001 From: Benjamin Otte Date: Tue, 3 Apr 2018 21:09:35 +0200 Subject: [PATCH] inspector: Change semantics of inspector render node notify Instead of just notifying the inspector of what is going to be rendered, allow the inspector to modify it. This way, the inspector can overlay information it deems relevant over the render node while still having access to what the actual widget (without the inspector) would paint. --- gtk/gtkwidget.c | 10 +++++----- gtk/inspector/window.c | 18 ++++++++++-------- gtk/inspector/window.h | 16 ++++++++-------- 3 files changed, 23 insertions(+), 21 deletions(-) diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 4ea1838e3c..d4c42d87ab 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -13509,11 +13509,11 @@ gtk_widget_render (GtkWidget *widget, if (root != NULL) { - gtk_inspector_record_render (widget, - renderer, - surface, - region, - root); + root = gtk_inspector_prepare_render (widget, + renderer, + surface, + region, + root); gsk_renderer_render (renderer, root, region); diff --git a/gtk/inspector/window.c b/gtk/inspector/window.c index 35bbf7f828..428de723c6 100644 --- a/gtk/inspector/window.c +++ b/gtk/inspector/window.c @@ -369,22 +369,22 @@ gtk_inspector_window_get_for_display (GdkDisplay *display) return g_object_get_data (G_OBJECT (display), "-gtk-inspector"); } -void -gtk_inspector_record_render (GtkWidget *widget, - GskRenderer *renderer, - GdkSurface *surface, - const cairo_region_t *region, - GskRenderNode *node) +GskRenderNode * +gtk_inspector_prepare_render (GtkWidget *widget, + GskRenderer *renderer, + GdkSurface *surface, + const cairo_region_t *region, + GskRenderNode *node) { GtkInspectorWindow *iw; iw = gtk_inspector_window_get_for_display (gtk_widget_get_display (widget)); if (iw == NULL) - return; + return node; /* sanity check for single-display GDK backends */ if (GTK_WIDGET (iw) == widget) - return; + return node; gtk_inspector_recorder_record_render (GTK_INSPECTOR_RECORDER (iw->widget_recorder), widget, @@ -392,6 +392,8 @@ gtk_inspector_record_render (GtkWidget *widget, surface, region, node); + + return node; } gboolean diff --git a/gtk/inspector/window.h b/gtk/inspector/window.h index 2966054e95..a9597b22bc 100644 --- a/gtk/inspector/window.h +++ b/gtk/inspector/window.h @@ -102,16 +102,16 @@ void gtk_inspector_stop_highlight (GtkWidget *widget); void gtk_inspector_on_inspect (GtkWidget *widget, GtkInspectorWindow *iw); -void gtk_inspector_window_select_widget_under_pointer (GtkInspectorWindow *iw); +void gtk_inspector_window_select_widget_under_pointer (GtkInspectorWindow *iw); -void gtk_inspector_window_rescan (GtkWidget *iw); +void gtk_inspector_window_rescan (GtkWidget *iw); -gboolean gtk_inspector_is_recording (GtkWidget *widget); -void gtk_inspector_record_render (GtkWidget *widget, - GskRenderer *renderer, - GdkSurface *surface, - const cairo_region_t *region, - GskRenderNode *node); +gboolean gtk_inspector_is_recording (GtkWidget *widget); +GskRenderNode * gtk_inspector_prepare_render (GtkWidget *widget, + GskRenderer *renderer, + GdkSurface *surface, + const cairo_region_t *region, + GskRenderNode *node); G_END_DECLS -- 2.30.2